/*
 * Superficie.cpp
 *
 *  Created on: 04/11/2012
 *      Author: Ignacio Galvez
 */
#include "Superficie.h"
#include "Punto.h"
#include <cmath>
#include <iostream>
// #define ALFA_1 1.249
// #define ALFA_3 1.892


Superficie::Superficie() {

	Punto* punto1 = new Punto(50, 100);
	Punto* punto2 = new Punto(80, 85);
	Punto* punto3 = new Punto(95, 105);
	Punto* punto4 = new Punto(120, 100);
	Punto* punto5 = new Punto(140, 100);
	Punto* punto6 = new Punto(180, 98);
	Punto* punto7 = new Punto(230, 101);
	Punto* punto8 = new Punto(270, 104);
	Punto* punto9 = new Punto(290, 99);
	Punto* punto10 = new Punto(310, 99);
	Punto* punto11 = new Punto(340, 100);
	Punto* punto12 = new Punto(380, 104);
	Punto* punto13 = new Punto(420, 102);
	Punto* punto14 = new Punto(440, 100);
	Punto* punto15 = new Punto(480, 110);
	Punto* punto16 = new Punto(520, 120);
	Punto* punto17 = new Punto(540, 110);
	Punto* punto18 = new Punto(580, 130);
	puntos[50] = punto1;
	puntos[80] = punto2;
	puntos[95] = punto3;
	puntos[120] = punto4;
	puntos[140] = punto5;
	puntos[180] = punto6;
	puntos[230] = punto7;
	puntos[270] = punto8;
	puntos[290] = punto9;
	puntos[320] = punto10;
	puntos[340] = punto11;
	puntos[380] = punto12;
	puntos[420] = punto13;
	puntos[440] = punto14;
	puntos[480] = punto15;
	puntos[520] = punto16;
	puntos[540] = punto17;
	puntos[580] = punto18;



}

// Superficie::Superficie(int  cantidadIntervalos, double altura) {
// double auxiliar = (double) cantidadIntervalos;
// longitudIntervalos = longitudSuperficie / auxiliar;
// double longitud = longitudIntervalos;
// Punto* punto = NULL;

// for (int i = 0; i < cantidadIntervalos; ++i) {
// 	double x0 = ALFA_1 * longitudIntervalos / 2 * M_PI;
// 	double x1 = longitud / 4.0;
//  	double x2 = ALFA_3 * longitudIntervalos / 2 * M_PI;
//  	double y0 = altura + pow(sin(ALFA_1), 2);
//  	double y1 = altura + pow(sin(M_PI_2), 2);
//  	double y2 = altura + pow(sin(ALFA_3), 2);
//  	punto = new Punto(x0, y0);
//  	puntos[x0] = punto;
//  	punto = new Punto(x1, y1);
//  	puntos[x1] = punto;
//  	punto = new Punto(x2, y2);
//  	puntos[x2] = punto;
//  	longitud += longitudIntervalos;
// }

//}

double Superficie::longitudSuperficie = 1000;

bool Superficie::recibirImpacto(double x, double y) {
	std::map<double , Punto*>::iterator it;
	double Ycritico;
	//const double epsilon = 50;
	Punto *punto1,*punto2;
	it = puntos.begin();
	while ((it != puntos.end())&&((it->second->getPosicionX()) <= x)) {
		++it;
	}
	punto2 = it->second;
	--it;
	punto1 = it->second;
	Ycritico = (punto2->getPosicionY() - punto1->getPosicionY())/
	(punto2->getPosicionX() - punto1->getPosicionX()) * 
	(x - punto1->getPosicionX()) + punto1->getPosicionY();
	return Ycritico >= y;
	//return fabs(Ycritico - y) < epsilon;
}



 Superficie::~Superficie() {}
